package com.hexiang.book.dao;

import com.hexiang.book.domain.Book;

import java.math.BigDecimal;
import java.util.List;

/**
 * 书籍数据库操作接口
 */
public interface BookRepository {

    /**
     * 查询并返回书籍总数
     *
     * @return 总数
     */
    int count();

    /**
     * 保存书籍
     *
     * @param book 书籍对象
     * @return 影响行数
     */
    int save(Book book);

    /**
     * 修改书籍
     *
     * @param book 书籍对象
     * @return 影响行数
     */
    int update(Book book);

    /**
     * 删除书籍
     *
     * @param id 书籍id
     * @return 影响行数
     */
    int deleteById(Long id);

    /**
     * 查询所有书籍，返回列表对象
     *
     * @return 列表对象
     */
    List<Book> findAll();

    /**
     * 根据书籍名称和价格查询书籍，返回列表对象
     *
     * @param name  书籍名称
     * @param price 价格
     * @return 列表对象
     */
    List<Book> findByNameAndPrice(String name, BigDecimal price);

    /**
     * 根据id查询书籍对象
     *
     * @param id 书籍id
     * @return 书籍对象
     */
    Book findById(Long id);

    /**
     * 根据id查询书籍名称
     *
     * @param id 书籍id
     * @return 书籍名称
     */
    String findNameById(Long id);

    /**
     * 批量保存书籍
     *
     * @param bookList 书籍列表
     * @return 保存结果
     */
    int[] batchInsert(List<Book> bookList);

    /**
     * 分批次批量保存书籍
     *
     * @param bookList  书籍列表
     * @param batchSize 每批次数量
     * @return 保存结果
     */
    int[][] batchInsert(List<Book> bookList, int batchSize);

    /**
     * 批量修改书籍
     *
     * @param bookList 书籍列表
     * @return
     */
    int[] batchUpdate(List<Book> bookList);

    /**
     * 分批次批量修改书籍
     *
     * @param bookList  书籍列表
     * @param batchSize 每批次数量
     * @return 保存结果
     */
    int[][] batchUpdate(List<Book> bookList, int batchSize);

}
